package com.cskaoyan.javase.oop2.extend2.advantage;

/**
 * @description: 继承的优缺点
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * - 在一款游戏中，我们有很三种类型的鸭子，这些鸭子都有共同属性，都可以叫（cry），都可以游泳（swim）
 * - 应该怎么编写这些鸭子类？
 * - 需求更改了，这些鸭子不能游泳了，但是都会飞（fly）
 * - 最后我添加了一种鸭子，第四种鸭子，这个鸭子不会飞
 *
 * 继承的优点：
 *  1，代码复用了
 *  2，代码的可维护性增强了，扩展性增强了
 *
 *  缺点：无法选择继承什么，父类中的成员必须每一个子类都继承，无法做出选择
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建对象
        FirstTypeDuck ftd = new FirstTypeDuck();
        SecondTypeDuck std = new SecondTypeDuck();
        ThirdTypeDuck ttd = new ThirdTypeDuck();
        ftd.fly();
        std.fly();
        ttd.fly();

        FourthTypeDuck ftd2 = new FourthTypeDuck();
        ftd2.fly();
    }
}

//立刻提取公因式，找到父类
class Duck {
    String name;

    //行为
    public void cry() {
        System.out.println("嘎嘎嘎");
    }
    //public void swim(){
    //    System.out.println("红掌拨清波"); //咏鹅
    //} 不会游泳了
    //会飞了
    public void fly() {
        System.out.println("鸭嘴兽超进化，会飞的鸭嘴兽");
    }
}

class FirstTypeDuck extends Duck {
}

class SecondTypeDuck extends Duck {
}

class ThirdTypeDuck extends Duck {
}

class FourthTypeDuck extends Duck {
    //第四种鸭子不会飞
    //方法的覆盖
   /* @Override
    public void fly() {
        System.out.println("我不会飞！");
    }*/
}
